/**
 * Notes: 内容检查助手 (新版API)
 * Ver : WeCollege Server API 1.0.0
 * Date: 2025-01-27
 * Description: 使用自建服务器API重构内容检查功能
 */

const serverHelper = require('./cloud_helper.js'); // 使用替换后的helper

class ContentCheckHelper {

  /**
   * 检查图片内容
   * @param {string} imgUrl - 图片URL
   * @returns {Promise<boolean>} 检查结果，true表示通过
   */
  static async checkImg(imgUrl) {
    if (!imgUrl) {
      return true;
    }

    try {
      const result = await serverHelper.callCloudSumbit('check/img', {
        imageUrl: imgUrl
      }, { title: 'bar' });

      // 返回检查结果
      return result.data && result.data.pass === true;
    } catch (err) {
      console.error('图片内容检查失败:', err);
      // 检查失败时默认通过，避免影响用户体验
      return true;
    }
  }

  /**
   * 检查文本内容
   * @param {string} text - 文本内容
   * @returns {Promise<boolean>} 检查结果，true表示通过
   */
  static async checkText(text) {
    if (!text || text.trim().length === 0) {
      return true;
    }

    try {
      const result = await serverHelper.callCloudSumbit('check/text', {
        content: text
      }, { title: 'bar' });

      // 返回检查结果
      return result.data && result.data.pass === true;
    } catch (err) {
      console.error('文本内容检查失败:', err);
      // 检查失败时默认通过，避免影响用户体验
      return true;
    }
  }

  /**
   * 批量检查图片
   * @param {Array<string>} imgUrls - 图片URL数组
   * @returns {Promise<boolean>} 检查结果，true表示全部通过
   */
  static async checkImgs(imgUrls) {
    if (!imgUrls || imgUrls.length === 0) {
      return true;
    }

    try {
      const checkPromises = imgUrls.map(url => ContentCheckHelper.checkImg(url));
      const results = await Promise.all(checkPromises);
      
      // 所有图片都通过检查才返回true
      return results.every(result => result === true);
    } catch (err) {
      console.error('批量图片检查失败:', err);
      return true;
    }
  }

  /**
   * 综合内容检查 (文本 + 图片)
   * @param {object} content - 内容对象
   * @param {string} content.text - 文本内容
   * @param {Array<string>} content.images - 图片URL数组
   * @returns {Promise<boolean>} 检查结果，true表示通过
   */
  static async checkContent(content) {
    if (!content) {
      return true;
    }

    try {
      const checks = [];

      // 检查文本
      if (content.text) {
        checks.push(ContentCheckHelper.checkText(content.text));
      }

      // 检查图片
      if (content.images && content.images.length > 0) {
        checks.push(ContentCheckHelper.checkImgs(content.images));
      }

      if (checks.length === 0) {
        return true;
      }

      const results = await Promise.all(checks);
      return results.every(result => result === true);
    } catch (err) {
      console.error('综合内容检查失败:', err);
      return true;
    }
  }

  /**
   * 检查表单内容
   * @param {object} formData - 表单数据
   * @returns {Promise<boolean>} 检查结果，true表示通过
   */
  static async checkFormData(formData) {
    if (!formData) {
      return true;
    }

    try {
      // 提取文本内容
      const textFields = [];
      const imageFields = [];

      Object.keys(formData).forEach(key => {
        const value = formData[key];
        if (typeof value === 'string' && value.trim().length > 0) {
          textFields.push(value);
        } else if (Array.isArray(value)) {
          // 假设数组是图片URL数组
          imageFields.push(...value);
        }
      });

      // 检查文本和图片
      const content = {
        text: textFields.join(' '),
        images: imageFields
      };

      return await ContentCheckHelper.checkContent(content);
    } catch (err) {
      console.error('表单内容检查失败:', err);
      return true;
    }
  }

  /**
   * 显示内容检查失败提示
   * @param {string} type - 内容类型 ('text' | 'image' | 'content')
   */
  static showCheckFailTip(type = 'content') {
    const messages = {
      text: '文本内容包含敏感信息，请修改后重试',
      image: '图片内容不符合规范，请更换图片',
      content: '内容包含敏感信息，请修改后重试'
    };

    wx.showModal({
      title: '内容审核失败',
      content: messages[type] || messages.content,
      showCancel: false,
      confirmText: '我知道了'
    });
  }
}

module.exports = ContentCheckHelper;